FROM php:8.3.26-cli-alpine3.22
# 使用阿里云镜像加速 APK 源
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
# 可选：切换至中科大镜像
# RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories

# 设置时区参数，默认 Asia/Shanghai
ARG timezone="Asia/Shanghai"
# 持久化环境变量，保留原有所有配置
ENV TIMEZONE=${timezone} \
    APP_ENV=prod \
    SCAN_CACHEABLE=(true) \
    APP_SYSTEM_ENV=docker \
    COMPOSER_CDN=https://packagist.org \
    COMPOSER_ALLOW_SUPERUSER=1 \
    CHROME_PATH=/usr/bin/chromium-browser \
    PANTHER_NO_SANDBOX=1 \
    PANTHER_CHROME_ARGUMENTS='--disable-dev-shm-usage'

# 保留字体拷贝逻辑，确保字体可用
COPY ./fonts/AppleColorEmoji.ttc /usr/share/fonts/custom/AppleColorEmoji.ttc
COPY ./fonts/PingFang.ttc       /usr/share/fonts/custom/PingFang.ttc

# 第一次设置工作目录，用于后续 RUN 中的 composer install 等操作
WORKDIR /app

RUN \
    # 安装 Composer 并设置镜像源
    curl -sfL https://getcomposer.org/installer | php -- --install-dir=/usr/bin --filename=composer --version=2.5.8 \
    && chmod +x /usr/bin/composer \
    && composer config -g repo.packagist composer ${COMPOSER_CDN} \
    \
    # 更新 apk 索引
    && apk update \
    \
    # 安装可选 Python3 及工具链（OCR 子集化字体等）
    #&& apk add --no-cache python3 python3-dev py3-pip py3-fonttools \
    # 安装 PostgreSQL 客户端用于数据迁移
    && apk add --no-cache postgresql-client postgresql-dev \
    # 安装常用工具链：git expect openssh bash ffmpeg exiftool libzip
    && apk add --no-cache git expect openssh-client openssl bash ffmpeg exiftool libzip \
    \
    # 安装 Chromium 及驱动、图形库（PDF 生成等场景） \
    # 忽略 nodejs npm
    && apk add --no-cache chromium chromium-chromedriver harfbuzz nss freetype dbus mesa-gbm mesa-gl mesa-egl xvfb alsa-lib \
       libxcomposite libxdamage libxfixes libxi libxtst udev fontconfig qpdf \
    \
    # 安装编译依赖并标记为 .build-deps，后续删除
    && apk add --no-cache --virtual .build-deps \
        $PHPIZE_DEPS \
        cmake linux-headers openssl-dev zlib-dev gmp-dev libzip-dev \
        curl-dev pcre-dev pcre2-dev libtool build-base freetype-dev \
        libjpeg-turbo-dev libpng-dev yasm \
    \
    # 克隆自定义扩展源码到临时目录
    && git clone https://gitee.com/lujihong/docker.git /tmp/docker \
    \
    # 安装 protobuf 编译器用于生成 PHP 类
    && mv /tmp/docker/protoc-31.0-linux-x86_64/bin/* /usr/local/bin/ \
    && chmod +x /usr/local/bin/protoc \
    && mv /tmp/docker/protoc-31.0-linux-x86_64/include/* /usr/local/include/ \
    \
    # 准备 PHP 源码目录，用于编译第三方扩展
    && docker-php-source extract \
    \
    # 部署 xlswriter 扩展源码并配置
    && mv /tmp/docker/xlswriter-1.5.5 /usr/src/php/ext/xlswriter \
    && docker-php-ext-configure xlswriter --enable-reader \
    \
    # 部署 sgloader 预编译扩展
    && mv /tmp/docker/sgloader/ixed.8.3.lin /usr/local/lib/php/extensions/no-debug-non-zts-20230831/ixed.8.3.lin \
    && echo "extension=ixed.8.3.lin" > /usr/local/etc/php/conf.d/docker-php-ext-sgloader.ini \
    \
    # 部署 swow 和 phpy 源码
    && mv /tmp/docker/swow-1.6.1/ext /usr/src/php/ext/swow \
    #&& mv /tmp/docker/phpy-1.0.11       /usr/src/php/ext/phpy \
    \
    # 安装并启用 PECL 扩展：redis、protobuf
    && pecl update-channels \
    && pecl install redis protobuf \
    && docker-php-ext-enable redis protobuf \
    \
    # 配置并编译其他 PHP 扩展
    && docker-php-ext-configure zip    --with-zip --with-php-config=/usr/local/bin/php-config \
    && docker-php-ext-configure gd     --enable-gd --with-freetype --with-jpeg \
    && docker-php-ext-configure swow   --enable-swow --enable-swow-ssl --enable-swow-curl \
    #&& docker-php-ext-configure phpy   --with-python-config=/usr/bin/python3-config \
    # 忽略 phpy
    && docker-php-ext-install -j"$(nproc)" \
        gmp zip sockets bcmath ctype pdo_mysql pdo_pgsql pcntl opcache sysvshm sysvmsg sysvsem gd xlswriter swow \
    \
    # 刷新字体缓存
    && fc-cache -f -v \
    \
    # 设置 PHP 配置：opcache
    && echo "opcache.enable_cli=On" >> /usr/local/etc/php/conf.d/docker-php-ext-opcache.ini \
    \
    # 清理构建依赖和缓存文件，减小镜像体积
    && docker-php-source delete \
    && apk del .build-deps \
    && rm -rf /var/cache/apk/* /tmp/* /usr/src/php* ~/.pearrc ~/.composer/*-old.phar \
    \
    # 生成并设置时区
    && ln -sf /usr/share/zoneinfo/${TIMEZONE} /etc/localtime \
    && echo "${TIMEZONE}" > /etc/timezone \
    \
    # 打印版本信息、PHP 模块验证构建
    && php -v \
    && php -m \
    && php --ri swow \
    && composer --version

# 第二次设置工作目录（保持原有 /opt/www/）
WORKDIR "/opt/www/"

# 可选：Composer 缓存和安装命令（根据需要解除注释）
# COPY ./composer.* /opt/www/
# RUN composer install --no-dev --no-scripts

# 暴露端口（如需）
# EXPOSE 9501 9502

# 启动命令
ENTRYPOINT ["php", "/opt/www/bin/hyperf.php", "start"]
